package control;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import model.Compra;
import model.ItemCompra;
import model.Produto;

@WebService()
public class CompraControle {

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("furb");
    EntityManager em = emf.createEntityManager();

    @WebMethod
    public String verificaEstoque(@WebParam(name = "wp_Compra") Compra compra) throws Exception {

        String retorno = "ok";

        System.out.println("Verificando estoque...");
        for (ItemCompra item : compra.getItens()) {
            Produto produto = item.getProduto();
            if ((produto.getQtdEstoque() - item.getQuantidade()) < 0) {
                throw new Exception("Produto "
                        + produto.getCodigo()
                        + produto.getDescricao().trim()
                        + " sem estoque!");
            }
        }
        return retorno;
    }

    @WebMethod
    public String gravarCompra(@WebParam(name = "wp_Compra") Compra compra) throws Exception {

        em.getTransaction().begin();

        String retorno = "";

        try {
            em.merge(compra);
            retiraEstoque(compra);
            em.getTransaction().commit();
        } catch (Exception ex) {
            em.getTransaction().rollback();
            throw ex;
        }

        em.close();
        emf.close();

        return retorno;
    }

    private void retiraEstoque(Compra compra) {

        for (ItemCompra item : compra.getItens()) {
            Produto produto = item.getProduto();
            produto.diminuirEstoque(item.getQuantidade());
            em.merge(produto);
        }
    }
}
